#include<cstdio>
#include<cmath>
#include<cstring>
bool d[230][230];
int n;
void Gauss()
{
	int i,j,k,p;
	k=1;
	for(int i=1;i<=n;i++)
	{
		j=i;
		while(d[j][k]==0)
		{
			while(d[j][k]==0){j++;if(j>n)break;}
			if(j>n)
			{
	//			for(p=1;p<i;p++)
	//				d[p][k]=0;
				j=i;
				k++;
				if(k>=n+1)return;
			}
		}
		if(j>i)	for(p=k;p<=n+1;p++)
			{
				bool t=d[j][p];
				d[j][p]=d[i][p];
				d[i][p]=t;
			}
		for(j=1;j<=n;j++)
			if(d[j][k]==1&&j!=i)
			{
				for(p=k;p<=n+1;p++)
					d[j][p]^=d[i][p];
			}
		k++;
		if(k>=n+1)return;
	}
}
int main()
{
	freopen("test.in","r",stdin);
	int t;
	scanf("%d",&t);
	while(t--)
	{
		memset(d,0,sizeof(d));
		scanf("%d",&n);
		int a[30];
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		int temp;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&temp);
			if(a[i]!=temp)d[i][n+1]=1;
			d[i][i]=1;
		}
		int r,c;
		while(scanf("%d%d",&r,&c),r|c)
			d[c][r]=1;
		/*for(i=1;i<=n;i++)
  		{
			for(j=1;j<=n+1;j++)
				printf("%d ",d[i][j]);
			puts("");
		}*/
		Gauss();
		int cnt=0,f=0,i,j;
		for(i=1;i<=n;i++)
		{
			for (j=i;j<=n;j++)
			{
				if(d[i][j]==1)break;
			}
			if(j>n)
			{
				if(d[i][n+1]==1)f=1;
				else cnt++;
			}
		}
		if(f)printf("Oh,it's impossible~!!\n");
		else printf("%d\n",(int)pow(2.0,cnt));
	}
	return 0;
}
